ACM: Test sharing as part of the authorization check.
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 20 Nov 2007 15:13:29 +0000 (15:13 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 20 Nov 2007 15:13:29 +0000 (15:13 +0000)
Protected the policy from being changed while the hooks are being
called.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
xen/include/xsm/acm/acm_hooks.h
xen/xsm/acm/acm_policy.c

index f3ca68fa01336cc82ce329158da30df74df05fa6..35ea144378bde99ba7f80f4103ef14ef37893e74 100644 (file)
@@ -325,7 +325,7 @@ static inline int acm_authorization(ssidref_t ssidref1, ssidref_t ssidref2)
              acm_secondary_ops->authorization(ssidref1, ssidref2)) {
         return ACM_ACCESS_DENIED;
     } else
-        return ACM_ACCESS_PERMITTED;
+        return acm_sharing(ssidref1, ssidref2);
 }
 
 
index 6f334effa81104aaaf730c037b0279952417d5f1..fce439c9fa92543625c85e123e37af2c704164d2 100644 (file)
@@ -430,6 +430,9 @@ int
 acm_get_decision(ssidref_t ssidref1, ssidref_t ssidref2, u32 hook)
 {
     int ret = ACM_ACCESS_DENIED;
+
+    read_lock(&acm_bin_pol_rwlock);
+
     switch ( hook )
     {
 
@@ -447,6 +450,8 @@ acm_get_decision(ssidref_t ssidref1, ssidref_t ssidref2, u32 hook)
         break;
     }
 
+    read_unlock(&acm_bin_pol_rwlock);
+
     printkd("%s: ssid1=%x, ssid2=%x, decision=%s.\n",
             __func__, ssidref1, ssidref2,
             (ret == ACM_ACCESS_PERMITTED) ? "GRANTED" : "DENIED");